package com.ylr.admin.framework.service;

import com.ylr.base.common.dto.PageDto;
import com.ylr.admin.common.dto.menu.MenuDto;
import com.ylr.admin.common.dto.menu.MenuEnumDto;
import com.ylr.base.common.vo.UpdateStatusVo;
import com.ylr.admin.common.vo.menu.MenuFormVo;
import com.ylr.admin.common.vo.menu.MenuVo;
import com.ylr.admin.framework.entity.MenuEntity;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * Created by IntelliJ IDEA.
 *
 * @author wyw
 * date: 2023-04-21 11:27:09
 * className: MenuService
 * version: 1.0
 * description:
 */
public interface MenuService extends IService<MenuEntity> {

    /**
     * 保存菜单操作
     * @param menuVo 参数对象
     */
    void saveMenu(MenuVo menuVo);

    /**
     * 分页查询菜单列表操作
     * 并将结果组装成菜单结构树返回
     * @param menuFormVo 参数对象
     * @return 菜单分页数据
     */
    PageDto<MenuDto> pageMenuList(MenuFormVo menuFormVo);

    /**
     * 分页查询一级菜单操作
     * 并将结果组装成菜单结构树返回
     * @param menuFormVo 参数对象
     * @return 菜单分页数据
     */
    PageDto<MenuDto> pageOneMenuList(MenuFormVo menuFormVo);

    /**
     * 获取菜单数据操作
     * @param id 主键
     * @return 菜单数据
     */
    MenuDto getMenu(Long id);

    /**
     * 获取子菜单下一个排序等级操作
     * 根据父级主键，获取其子菜单的下一个排序等级
     * @param parentId 父级主键
     * @return 排序等级数值
     */
    Integer getNextSort(Long parentId);

    /**
     * 获取菜单结构树操作
     * 如果传递父级主键，则获取其子菜单结构树
     * @param parentId 父级主键
     * @return 菜单结构树数据
     */
    List<MenuDto> getMenuTree(Long parentId);

    /**
     * 获取菜单页面枚举数据操作
     * @return 页面枚举数据
     */
    MenuEnumDto getPageEnums();

    /**
     * 修改菜单操作
     * @param menuVo 参数对象
     */
    void updateMenu(MenuVo menuVo);

    /**
     * 修改菜单状态操作
     * @param updateStatusVo 参数对象
     */
    void updateMenuStatus(UpdateStatusVo updateStatusVo);

    /**
     * 删除菜单接口
     * @param idList 主键列表
     */
    void deleteMenu(List<Long> idList);

}

